package u2

import (
	"log"
	"strconv"
	"time"
)

var TimeLayout string = "2006-01-02 15:04:05"

// TimeFormat2timestamp 将格式化的时间字符串转换为时间戳
//
// 参数：
//
//	settime - 格式化的时间字符串，格式为"2006-01-02 15:04:05"
//	isMS - 是否返回毫秒级时间戳
//
// 返回值：
//
//	int64 - 时间戳，如果解析失败返回-1
//
// 注意：
//  1. 使用time.Parse进行解析，使用本地时区
//  2. 当isMS为true时，返回毫秒级时间戳
//  3. 解析失败时会记录错误日志
//
// 示例：
//
//	timestamp := TimeFormat2timestamp("2023-01-01 12:00:00", true) // 返回1672531200000
func TimeFormat2timestamp(settime string, isMS bool) int64 {

	times, err := time.Parse(TimeLayout, settime)
	if err != nil {
		log.Println(err)
		return -1
	}

	timeUnixNano := times.Local().UnixNano()
	if isMS {
		return (timeUnixNano - 8*time.Hour.Nanoseconds()) / 1000000
		// return timeUnixNano / 1000000

	} else {
		return (timeUnixNano - 8*time.Hour.Nanoseconds())
		// return timeUnixNano / 1000000000
	}
}

// TimeFormat2timestampString 将格式化的时间字符串转换为字符串形式的时间戳
//
// 参数：
//
//	settime - 格式化的时间字符串，格式为"2006-01-02 15:04:05"
//	isMS - 是否返回毫秒级时间戳
//
// 返回值：
//
//	string - 字符串形式的时间戳，如果解析失败返回"-1"
//
// 注意：
//  1. 内部调用TimeFormat2timestamp函数
//  2. 使用strconv.FormatInt将int64转换为字符串
//
// 示例：
//
//	timestampStr := TimeFormat2timestampString("2023-01-01 12:00:00", true) // 返回"1672531200000"
func TimeFormat2timestampString(settime string, isMS bool) string {
	return strconv.FormatInt(TimeFormat2timestamp(settime, isMS), 10)
}
